HIDING: 3
};
+// These reasons are useful when we destroy the notifications received through
+// the notification daemon. We use EXPIRED for transient notifications that the
+// user did not interact with, DISMISSED for all other notifications that were
+// destroyed as a result of a user action, and SOURCE_CLOSED for the notifications
+// that were requested to be destroyed by the associated source.
+const NotificationDestroyedReason = {
+ EXPIRED: 1,
+ DISMISSED: 2,
+ SOURCE_CLOSED 3
+};
+
// Message tray has its custom Urgency enumeration. LOW, NORMAL and CRITICAL
// urgency values map to the corresponding values for the notifications received
// through the notification daemon. HIGH urgency value is used for chats received
}
},
- destroy: function() {
- this.emit('destroy');
+ destroy: function(reason) {
+ if (!reason)
+ reason = NotificationDestroyedReason.DISMISSED;
+ this.emit('destroy', reason);
}
};
Signals.addSignalMethods(Notification.prototype);
let notification = this._notification;
this._notification = null;
if (notification.isTransient)
- notification.destroy();
+ notification.destroy(NotificationDestroyedReason.EXPIRED);
},
_expandNotification: function(autoExpanding) {
let summaryNotification = this._summaryNotification;
this._summaryNotification = null;
if (summaryNotification.isTransient && !this._reNotifyWithSummaryNotificationAfterHide)
- summaryNotification.destroy();
+ summaryNotification.destroy(NotificationDestroyedReason.EXPIRED);
if (this._reNotifyWithSummaryNotificationAfterHide) {
this._onNotify(summaryNotification.source, summaryNotification);
this._reNotifyWithSummaryNotificationAfterHide = false;
{ icon: iconActor,
bannerMarkup: true });
ndata.notification = notification;
- notification.connect('clicked', Lang.bind(this,
- function(n) {
- this._emitNotificationClosed(id, NotificationClosedReason.DISMISSED);
- }));
notification.connect('destroy', Lang.bind(this,
- function(n) {
+ function(n, reason) {
delete this._notifications[id];
+ let notificationClosedReason;
+ switch (reason) {
+ case MessageTray.NotificationDestroyedReason.EXPIRED:
+ notificationClosedReason = NotificationClosedReason.EXPIRED;
+ break;
+ case MessageTray.NotificationDestroyedReason.DISMISSED:
+ notificationClosedReason = NotificationClosedReason.DISMISSED;
+ break;
+ case MessageTray.NotificationDestroyedReason.SOURCE_CLOSED:
+ notificationClosedReason = NotificationClosedReason.APP_CLOSED;
+ break;
+ }
+ this._emitNotificationClosed(id, notificationClosedReason);
}));
notification.connect('action-invoked', Lang.bind(this,
function(n, actionId) {
let ndata = this._notifications[id];
if (ndata) {
if (ndata.notification)
- ndata.notification.destroy();
+ ndata.notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
delete this._notifications[id];
}
- this._emitNotificationClosed(id, NotificationClosedReason.APP_CLOSED);
},
GetCapabilities: function() {